// 1.练习结构体数组排序　　 
// 	从键盘输入5个学生的信息（姓名、学号、成绩）,
// 	存入一个结构体数组中，计算平均分，并按成绩
// 	高低排序并输出.

#include "list.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define STR_LEN 50

// 定义头指针
SP head = NULL;

int main(int argc, char **argv)
{
    SP temp_node = NULL;
    char *str = NULL;
    int i = 0;
    char name[32] = "";

    // 为字符串申请空间
    str = calloc(STR_LEN, sizeof(char));
    if (str == NULL)
    {
        perror("calloc_error");
        goto error0;
    }

    // 人机交互
    printf("请输入5个信息（姓名 学号 成绩）\n");

    // 循环获取键盘输入，并插入链表
    for (i = 0; i < 5; i++)
    {
        fgets(str, STR_LEN, stdin);

        // 去掉回车
        str[my_strlen(str) - 1] = '\0';

        // 创建节点空间
        temp_node = malloc(sizeof(STU));
        if (temp_node == NULL)
        {
            perror("malloc_error");
            goto error1;
        }
        // 后指针指向空
        temp_node->next = NULL;

        // 解包键盘输入
        sscanf(str, "%[^ ]%d %f", name, &temp_node->number, &temp_node->grade);

        // 申请姓名空间
        temp_node->name = calloc(my_strlen(name) + 1, sizeof(char));

        // 赋值
        strcpy(temp_node->name, name);

        // 插入链表 （尾部插入）
        insert_tail(&head, temp_node);

    }

    //list_printf(head);

    

    // 排序
    list_sort(&head);

    list_printf(head);

    return 0;

error1:
    // 释放链表所有空间
    while (head != NULL)
    {
        temp_node = head;
        free(head->name);
        head->name = NULL;
        head = head->next;
        free(temp_node);
    }

    // 释放字符串空间
    free(str);
    str = NULL;

error0:
    return 1;

}